import { useAuthStore } from '../store/useAuthStore'
import { ElMessage } from 'element-plus'
import router from '../router'

// JWT解码后的结构
interface JwtPayload {
  exp: number
  iat: number
  sub: string
  [key: string]: any
}

/**
 * 解析JWT token
 * @param token - JWT token字符串
 * @returns 解析后的payload，或null（如果解析失败）
 */
export const decodeToken = (token: string): JwtPayload | null => {
  if (!token) return null
  
  try {
    // 分割token，获取payload部分
    const base64Url = token.split('.')[1]
    // 将base64转为普通字符串
    const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/')
    // 解码并解析JSON
    const payload = JSON.parse(window.atob(base64))
    return payload
  } catch (error) {
    console.error('Token解析失败:', error)
    return null
  }
}

/**
 * 检查token是否过期
 * @param token - JWT token字符串
 * @returns 是否过期
 */
export const isTokenExpired = (token: string): boolean => {
  const payload = decodeToken(token)
  if (!payload) return true
  
  // 获取token过期时间（秒）并转换为毫秒
  const expirationTime = payload.exp * 1000
  
  // 比较当前时间与过期时间
  return Date.now() >= expirationTime
}

/**
 * 检查当前token是否有效
 * @returns 是否有效
 */
export const checkTokenValidity = (): boolean => {
  const token = localStorage.getItem('token')
  
  if (!token) return false
  
  return !isTokenExpired(token)
}

/**
 * 执行登出操作
 */
export const logout = () => {
  const authStore = useAuthStore()
  
  // 清除store数据
  authStore.$reset()
  
  // 清除所有localStorage数据
  localStorage.removeItem('token')
  localStorage.removeItem('user')
  localStorage.removeItem('refresh_token')
  
  // 清除所有sessionStorage数据
  sessionStorage.clear()
  
  // 显示提示
  ElMessage.warning('登录已过期，请重新登录')
  
  // 跳转到登录页
  router.push('/auth/login')
}

/**
 * 检查token，如果过期则登出
 */
export const checkTokenAndLogout = (): void => {
  const token = localStorage.getItem('token')
  
  if (!token || isTokenExpired(token)) {
    logout()
  }
} 